/*
 * Evento.java
 *
 * Created on 2 de Abril de 2008, 01:24
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package Simulador.Event;

import Simulador.Job.Segmento;

/**
 *
 * @author Fernando
 * @author Matheus
 */
public class Evento {
    /**
     * Tipos de Evento.
     */
    public static final int
            NovoSegmento          =  1,
            AlocaMemoria          =  2,
            RequereCPU            =  3,
            ProxSegmento          =  4,
            RequereLeituraArquivo =  5,
            RequereEscritaArquivo =  6,
            FimIOArquivo          =  7,
            FimSegmento           =  8,
            RequereIODisco        =  9,
            FimIODisco            = 10
            ;

    
    private int tipoEvento;
    private float tempo;
    private Segmento s;
    private Object info;
    
    /** Creates a new instance of Evento
     * @param tipoEvento
     * Tipo do Evento criado. Deve estar em conformidade com a numeracao da
     * classe Evento.
     * @param s
     * Segmento que causa esse evento
     * @param momentoDeChegada 
     * Momento em que este evento vai ocorrer
     */
    public Evento(int tipoEvento, Segmento s, float momentoDeChegada) {
        this.s = s;
        this.tipoEvento = tipoEvento;
        tempo = momentoDeChegada;
        info = null;
    }
    
     /** Creates a new instance of Evento
     * @param tipoEvento
     * Tipo do Evento criado. Deve estar em conformidade com a numeracao da
     * classe Evento.
     * @param s
     * Segmento que causa esse evento
     * @param momentoDeChegada 
     * Momento em que este evento vai ocorrer
     * @param info 
     * Informacoes adicionais sobre o evento.
     */
    public Evento(int tipoEvento, Segmento s, float momentoDeChegada, Object info){
        this.s = s;
        this.tipoEvento = tipoEvento;
        tempo = momentoDeChegada;
        this.info = info;
    }
    
    /**
     * Tipos de Evento:
     * NovoProcesso = 1,  AlocaMemoria = 2,  RequereCPU = 3,  ProxProcesso = 4,
     * RequereIO = 5,  FimIO = 6,  FimProcesso = 7; 
     * @return
     * Tipo do evento.
     */
    public int getTipoEvento() {
        return tipoEvento;
    }

    /**
     * 
     * @return
     * Processo causador do Evento.
     */
    public Segmento getSegmento() {
        return s;
    }

    /**
     * Utilizado para o caso do momento de chegada ja ter passado(outro evento
     * estava sendo tratado)
     * 
     * @param momentoDeChegada
     * É o momento em que o evento vai ocorrer
     */
    public void setMomentoDeChegada(float momentoDeChegada) {
        tempo = momentoDeChegada;
    }

    /**
     * 
     * @return
     * Momento que o evento vai ocorrer.
     */
    public float getMomentoDeChegada() {
        return tempo;
    }

    public Object getInfo() {
        return info;
    }

}
